import axios from 'axios'
import config from './config'

//通过process.env.NODE_ENV拿到一个环境变量，来判断是开发环境还是生产环境
const baseUrl =
  process.env.NODE_ENV === 'development'
    ? config.baseUrl.dev
    : config.baseUrl.pro
//编写工具类,封装HTTP请求的
class HttpRequest {
  // 接收一个基础URL，并将其保存在类的实例中
  constructor (baseUrl) {
    this.baseUrl = baseUrl
  }
  getInsideConfig () {
    // 这个配置对象将被用于每个请求
    const config = {
      // 返回一个包含基础URL和请求头的对象
      baseUrl: this.baseUrl,
      header: {}
    }
    return config
  }

  // 接收一个axios实例，并为其添加请求拦截器和响应拦截器。
  interceptors (instance) {
    //添加请求拦截器
    instance.interceptors.request.use(
      function (config) {
        //在发送请求之前做些什么
        return config
      },
      function (error) {
        //对请求错误做些什么
        return Promise.reject(error)
      }
    )
    //添加响应拦截器
    instance.interceptors.response.use(
      function (response) {
        //对响应数据做点什么
        return response
      },
      function (error) {
        //对响应错误做点什么
        return Promise.reject(error)
      }
    )
  }
  // 接收一个options对象，它包含了请求的配置
  request (options) {
    // 使用axios.create()创建一个新的axios实例
    const instance = axios.create()
    // 将内部配置和传入的options合并，形成最终的请求配置。
    options = { ...this.getInsideConfig(), ...options }
    //调用interceptors方法来设置拦截器
    this.interceptors(instance)
    return instance(options)
  }
}
export default new HttpRequest(baseUrl)
